package main

import (
	"log"
	"net"
)

func main() {
	// 监听本地4500端口
	localAddr, err := net.ResolveUDPAddr("udp", ":4500")
	if err != nil {
		log.Println("解析本地地址出错:", err)
		return
	}

	// 建立UDP连接
	conn, err := net.ListenUDP("udp", localAddr)
	if err != nil {
		log.Println("监听出错:", err)
		return
	}
	defer conn.Close()

	log.Println("[告警服务] UDP 服务器正在监听", localAddr)

	// 准备转发目标地址列表
	targetAddrs := []*net.UDPAddr{
		{
			IP:   net.ParseIP("10.62.232.160"),
			Port: 6001,
		},
		{
			IP:   net.ParseIP("10.62.14.18"),
			Port: 6001,
		},
	}

	// 接收并转发数据
	for {
		buffer := make([]byte, 4096) // 更大的缓冲区
		n, clientAddr, err := conn.ReadFromUDP(buffer)
		if err != nil {
			log.Println("[错误连接] 从UDP连接读取数据出错:", err)
			continue
		}

		log.Printf("[数据监听] 从 %s 接收到 %d 字节的告警数据:  %s \n", clientAddr, n, buffer[:n])

		// 将接收到的数据转发到每个目标地址
		for _, targetAddr := range targetAddrs {
			_, err := conn.WriteToUDP(buffer[:n], targetAddr)
			if err != nil {
				log.Println("推送告警出错:", err)
				continue
			}
			log.Println("[告警推送] 告警已转发至", targetAddr)
		}
	}
}
